package site.zhoulei.springbootstu.model;
import com.fasterxml.jackson.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
import java.util.List;

/**
 * 测试lombok接口   @Data @Builder等注解
 * GJsonFormat  alt+S（大写） 自动转json生成代码
 * @author zlleige
 * @create 2020-07-29 9:22
 */
@Data  //get和set方法 equals方法canEqual方法 hashCode方法 toString方法
@AllArgsConstructor //有参构造
@NoArgsConstructor//无参构造
@Builder //构建者模式
//@JsonPropertyOrder(value = {"createTime","content"}) //Jacson注解 返回数据顺序
public class Article {

    /**
     * id : 1
     * author : zimug
     * title : 手摸手教你开发spring boot
     * content : c
     * createTime :
     * reader : [{"name":"zimug","age":18},{"name":"kobe","age":37}]
     */

    /*
    在Spring中注解方法使用Jackson
    以post增加方法为例，接口返回Article对象，在返回的json中改变
    @JsonPropertyOrder(value={"pname1","pname2"}) 改变子属性在JSON序列化中的默认定义的顺序。如：param1在先，param2在后。
    @JsonIgnore 排除某个属性不做序列化与反序列化
    @JsonProperty(anotherName) 为某个属性换一个名称，体现在JSON数据里面
    @JsonInclude(JsonInclude.Include.NON_NULL) 排除为空的元素不做序列化反序列化
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") 指定日期类型的属性格式
     */
    //@JsonIgnore //排除某个属性不做序列化与反序列化
    private Long id;
    //@JsonProperty("auther") //返回的json中 给author取别名
    private String author;
    private String title;
    private String content;
    @JsonInclude(JsonInclude.Include.NON_NULL) //若该元素为空 则不进行序列号，不做返回
    @JsonFormat(pattern = "yyyy-MM-dd HH:ss:mm",timezone = "GMT+8") //对于时间做的格式化 可在配置文件中全局设置 东八区
    private Date createTime;
    private List<Reader> reader;
}
